/*
 * IBM Corporation.
 * Copyright (c) 2014 All Rights Reserved.
 */

package com.ibm.iisp.dataie.service;

import java.util.List;

import com.ibm.iisp.common.exception.I18nAppException;
import com.ibm.iisp.common.vo.PagedQueryResult;
import com.ibm.iisp.dataie.model.DataIETable;
import com.ibm.iisp.dataie.model.DataIETemplate;
import com.ibm.iisp.dataie.model.DataImport;
import com.ibm.iisp.dataie.model.DataImportAction;
import com.ibm.iisp.dataie.vo.DataExportRequest;
import com.ibm.iisp.dataie.vo.DataImportQueryParam;
import com.ibm.iisp.dataie.vo.NodeImportState;

/**
 * 类作用：
 * @author Johnny@cn.ibm.com
 * 使用说明：
 */
public interface DataIEService {
	List<DataIETemplate> getDataIETemplatesByTable(String table);

	DataExportRequest getDataExportRequestByTemplate(Long templateId);

	DataExportRequest getDataExportRequestByName(String tableName, boolean hasTemplate);

	DataIETemplate genDefaultTemplate(String table);
	
	/**
	 * @param template
	 * @throws I18nAppException
	 */
	DataIETemplate saveTemplate(DataIETemplate template) throws I18nAppException;
	/**
	 * @param id
	 */
	DataIETemplate getDataIETemplate(Long id);

	/**
	 * @param id
	 */
	void delDataIETemplate(Long id);

	DataImport updateDataImport(DataImport dataImport);

	DataImport getDataImport(Long id);
	/**
	 * @param param
	 * @return
	 */
	PagedQueryResult<DataImport> searchDataImports(DataImportQueryParam param);

	/**
	 * @param dataExportDef
	 * @return
	 * @throws I18nAppException
	 */
	String exportData(DataExportRequest dataExportDef) throws I18nAppException;

	/**
	 * @param dataImport
	 * @param approved
	 *            TODO
	 * @return
	 * @throws I18nAppException
	 */
	DataImport dataImportRequest(DataImport dataImport, boolean approved) throws I18nAppException;

	/**
	 * @param id
	 * @param action
	 * @return
	 * @throws I18nAppException
	 */
	DataImport dataImportExecute(Long id, DataImportAction action) throws I18nAppException;

	/**
	 * @return
	 */
	List<DataIETable> getDataIETables();

	/**
	 * 需要分公司补录的表
	 * 
	 * @return
	 */
	List<DataIETable> getNodeImportTables();

	/**
	 * @param tableCode
	 * @param dataDate
	 * @return
	 */
	List<NodeImportState> getDataImportStateByTableAndDate(String tableCode, String dataDate);
}